/*! pace 0.5.1 */
(function() {
	var a,
		b,
		c,
		d,
		e,
		f,
		g,
		h,
		i,
		j,
		k,
		l,
		m,
		n,
		o,
		p,
		q,
		r,
		s,
		t,
		u,
		v,
		w,
		x,
		y,
		z,
		A,
		B,
		C,
		D,
		E,
		F,
		G,
		H,
		I,
		J,
		K,
		L,
		M,
		N,
		O,
		P,
		Q,
		R,
		S,
		T,
		U,
		V,
		W = [].slice,
		X = {}.hasOwnProperty,
		Y = function(a, b) {
			function c() {
				this.constructor = a
			}
			for (var d in b) X.call(b, d) && (a[d] = b[d]);
			return c.prototype = b.prototype, a.prototype = new c, a.__super__ = b.prototype, a
		},
		Z = [].indexOf || function(a) {
			for (var b = 0, c = this.length; c > b; b++)
				if (b in this && this[b] === a) return b;
			return -1
		};
	for (t = {
			catchupTime : 500,
			initialRate : .03,
			minTime : 500,
			ghostTime : 500,
			maxProgressPerFrame : 10,
			easeFactor : 1.25,
			startOnPageLoad : !0,
			restartOnPushState : !0,
			restartOnRequestAfter : 500,
			target : "body",
			elements : {
				checkInterval : 100,
				selectors : [ "body" ]
			},
			eventLag : {
				minSamples : 10,
				sampleCount : 3,
				lagThreshold : 3
			},
			ajax : {
				trackMethods : [ "GET" ],
				trackWebSockets : !0,
				ignoreURLs : []
			}
		}, B = function() {
			var a;
			return null != (a = "undefined" != typeof performance && null !== performance ? "function" == typeof performance.now ? performance.now() : void 0 : void 0) ? a : +new Date
		}, D = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame, s = window.cancelAnimationFrame || window.mozCancelAnimationFrame, null == D && (D = function(a) {
			return setTimeout(a, 50)
		}, s = function(a) {
			return clearTimeout(a)
		}), F = function(a) {
			var b,
				c;
			return b = B(), (c = function() {
					var d;
					return d = B() - b, d >= 33 ? (b = B(), a(d, function() {
							return D(c)
						})) : setTimeout(c, 33 - d)
				})()
		}, E = function() {
			var a,
				b,
				c;
			return c = arguments[0], b = arguments[1], a = 3 <= arguments.length ? W.call(arguments, 2) : [], "function" == typeof c[b] ? c[b].apply(c, a) : c[b]
		}, u = function() {
			var a,
				b,
				c,
				d,
				e,
				f,
				g;
			for (b = arguments[0], d = 2 <= arguments.length ? W.call(arguments, 1) : [], f = 0, g = d.length; g > f; f++)
				if (c = d[f])
					for (a in c) X.call(c, a) && (e = c[a], null != b[a] && "object" == typeof b[a] && null != e && "object" == typeof e ? u(b[a], e) : b[a] = e);
			return b
		}, p = function(a) {
			var b,
				c,
				d,
				e,
				f;
			for (c = b = 0, e = 0, f = a.length; f > e; e++) d = a[e], c += Math.abs(d), b++;
			return c / b
		}, w = function(a, b) {
			var c,
				d,
				e;
			if (null == a && (a = "options"), null == b && (b = !0), e = document.querySelector("[data-pace-" + a + "]")) {
				if (c = e.getAttribute("data-pace-" + a), !b) return c;
				try {
					return JSON.parse(c)
				} catch (f) {
					return d = f, "undefined" != typeof console && null !== console ? console.error("Error parsing inline pace options", d) : void 0
				}
			}
		}, g = function() {
			function a() {
			}
			return a.prototype.on = function(a, b, c, d) {
					var e;
					return null == d && (d = !1), null == this.bindings && (this.bindings = {}), null == (e = this.bindings)[a] && (e[a] = []), this.bindings[a].push({
							handler : b,
							ctx : c,
							once : d
						})
				}, a.prototype.once = function(a, b, c) {
					return this.on(a, b, c, !0)
				}, a.prototype.off = function(a, b) {
					var c,
						d,
						e;
					if (null != (null != (d = this.bindings) ? d[a] : void 0)) {
						if (null == b) return delete this.bindings[a];
						for (c = 0, e = []; c < this.bindings[a].length;) this.bindings[a][c].handler === b ? e.push(this.bindings[a].splice(c, 1)) : e.push(c++);
						return e
					}
				}, a.prototype.trigger = function() {
					var a,
						b,
						c,
						d,
						e,
						f,
						g,
						h,
						i;
					if (c = arguments[0], a = 2 <= arguments.length ? W.call(arguments, 1) : [], null != (g = this.bindings) ? g[c] : void 0) {
						for (e = 0, i = []; e < this.bindings[c].length;) h = this.bindings[c][e], d = h.handler, b = h.ctx, f = h.once, d.apply(null != b ? b : this, a), f ? i.push(this.bindings[c].splice(e, 1)) : i.push(e++);
						return i
					}
				}, a
		}(), null == window.Pace && (window.Pace = {}), u(Pace, g.prototype), C = Pace.options = u({}, t, window.paceOptions, w()), T = [ "ajax", "document", "eventLag", "elements" ], P = 0, R = T.length;R > P; P++) J = T[P], C[J] === !0 && (C[J] = t[J]);
	i = function(a) {
		function b() {
			return U = b.__super__.constructor.apply(this, arguments)
		}
		return Y(b, a), b
	}(Error), b = function() {
		function a() {
			this.progress = 0
		}
		return a.prototype.getElement = function() {
				var a;
				if (null == this.el) {
					if (a = document.querySelector(C.target), !a)
						throw new i;
					this.el = document.createElement("div"), this.el.className = "pace pace-active", document.body.className = document.body.className.replace(/pace-done/g, ""), document.body.className += " pace-running", this.el.innerHTML = '<div class="pace-progress">\n  <div class="pace-progress-inner"></div>\n</div>\n<div class="pace-activity"></div>', null != a.firstChild ? a.insertBefore(this.el, a.firstChild) : a.appendChild(this.el)
				}
				return this.el
			}, a.prototype.finish = function() {
				var a;
				return a = this.getElement(), a.className = a.className.replace("pace-active", ""), a.className += " pace-inactive", document.body.className = document.body.className.replace("pace-running", ""), document.body.className += " pace-done"
			}, a.prototype.update = function(a) {
				return this.progress = a, this.render()
			}, a.prototype.destroy = function() {
				try {
					this.getElement().parentNode.removeChild(this.getElement())
				} catch (a) {
					i = a
				} return this.el = void 0
			}, a.prototype.render = function() {
				var a,
					b;
				return null == document.querySelector(C.target) ? !1 : (a = this.getElement(), a.children[0].style.width = "" + this.progress + "%", (!this.lastRenderedProgress || this.lastRenderedProgress | 0 !== this.progress | 0) && (a.children[0].setAttribute("data-progress-text", "" + (0 | this.progress) + "%"), this.progress >= 100 ? b = "99" : (b = this.progress < 10 ? "0" : "", b += 0 | this.progress), a.children[0].setAttribute("data-progress", "" + b)), this.lastRenderedProgress = this.progress)
			}, a.prototype.done = function() {
				return this.progress >= 100
			}, a
	}(), h = function() {
		function a() {
			this.bindings = {}
		}
		return a.prototype.trigger = function(a, b) {
				var c,
					d,
					e,
					f,
					g;
				if (null != this.bindings[a]) {
					for (f = this.bindings[a], g = [], d = 0, e = f.length; e > d; d++) c = f[d], g.push(c.call(this, b));
					return g
				}
			}, a.prototype.on = function(a, b) {
				var c;
				return null == (c = this.bindings)[a] && (c[a] = []), this.bindings[a].push(b)
			}, a
	}(), O = window.XMLHttpRequest, N = window.XDomainRequest, M = window.WebSocket, v = function(a, b) {
		var c,
			d,
			e,
			f;
		f = [];
		for (d in b.prototype) try {
				e = b.prototype[d], null == a[d] && "function" != typeof e ? f.push(a[d] = e) : f.push(void 0)
			} catch (g) {
				c = g
		} return f
	}, z = [], Pace.ignore = function() {
		var a,
			b,
			c;
		return b = arguments[0], a = 2 <= arguments.length ? W.call(arguments, 1) : [], z.unshift("ignore"), c = b.apply(null, a), z.shift(), c
	}, Pace.track = function() {
		var a,
			b,
			c;
		return b = arguments[0], a = 2 <= arguments.length ? W.call(arguments, 1) : [], z.unshift("track"), c = b.apply(null, a), z.shift(), c
	}, I = function(a) {
		var b;
		if (null == a && (a = "GET"), "track" === z[0]) return "force";
		if (!z.length && C.ajax) {
			if ("socket" === a && C.ajax.trackWebSockets) return !0;
			if (b = a.toUpperCase(), Z.call(C.ajax.trackMethods, b) >= 0) return !0
		}
		return !1
	}, j = function(a) {
		function b() {
			var a,
				c = this;
			b.__super__.constructor.apply(this, arguments), a = function(a) {
				var b;
				return b = a.open, a.open = function(d, e) {
						return I(d) && c.trigger("request", {
								type : d,
								url : e,
								request : a
							}), b.apply(a, arguments)
				}
			}, window.XMLHttpRequest = function(b) {
				var c;
				return c = new O(b), a(c), c
			}, v(window.XMLHttpRequest, O), null != N && (window.XDomainRequest = function() {
				var b;
				return b = new N, a(b), b
			}, v(window.XDomainRequest, N)), null != M && C.ajax.trackWebSockets && (window.WebSocket = function(a, b) {
				var d;
				return d = null != b ? new M(a, b) : new M(a), I("socket") && c.trigger("request", {
						type : "socket",
						url : a,
						protocols : b,
						request : d
					}), d
			}, v(window.WebSocket, M))
		}
		return Y(b, a), b
	}(h), Q = null, x = function() {
		return null == Q && (Q = new j), Q
	}, H = function(a) {
		var b,
			c,
			d,
			e;
		for (e = C.ajax.ignoreURLs, c = 0, d = e.length; d > c; c++)
			if (b = e[c], "string" == typeof b) {
				if (-1 !== a.indexOf(b)) return !0
			} else if (b.test(a)) return !0;
		return !1
	}, x().on("request", function(b) {
		var c,
			d,
			e,
			f,
			g;
		return f = b.type, e = b.request, g = b.url, H(g) ? void 0 : Pace.running || C.restartOnRequestAfter === !1 && "force" !== I(f) ? void 0 : (d = arguments, c = C.restartOnRequestAfter || 0, "boolean" == typeof c && (c = 0), setTimeout(function() {
				var b,
					c,
					g,
					h,
					i,
					j;
				if (b = "socket" === f ? e.readyState < 2 : 0 < (h = e.readyState) && 4 > h) {
					for (Pace.restart(), i = Pace.sources, j = [], c = 0, g = i.length; g > c; c++) {
						if (J = i[c], J instanceof a) {
							J.watch.apply(J, d);break
						}
						j.push(void 0)
					}
					return j
				}
			}, c))
	}), a = function() {
		function a() {
			var a = this;
			this.elements = [], x().on("request", function() {
				return a.watch.apply(a, arguments)
			})
		}
		return a.prototype.watch = function(a) {
				var b,
					c,
					d,
					e;
				return d = a.type, b = a.request, e = a.url, H(e) ? void 0 : (c = "socket" === d ? new m(b) : new n(b), this.elements.push(c))
			}, a
	}(), n = function() {
		function a(a) {
			var b,
				c,
				d,
				e,
				f,
				g,
				h = this;
			if (this.progress = 0, null != window.ProgressEvent)
				for (c = null, a.addEventListener("progress", function(a) {
						return h.progress = a.lengthComputable ? 100 * a.loaded / a.total : h.progress + (100 - h.progress) / 2
					}), g = [ "load", "abort", "timeout", "error" ], d = 0, e = g.length; e > d; d++) b = g[d], a.addEventListener(b, function() {
						return h.progress = 100
					});
			else f = a.onreadystatechange, a.onreadystatechange = function() {
					var b;
					return 0 === (b = a.readyState) || 4 === b ? h.progress = 100 : 3 === a.readyState && (h.progress = 50), "function" == typeof f ? f.apply(null, arguments) : void 0
			}
		}
		return a
	}(), m = function() {
		function a(a) {
			var b,
				c,
				d,
				e,
				f = this;
			for (this.progress = 0, e = [ "error", "open" ], c = 0, d = e.length; d > c; c++) b = e[c], a.addEventListener(b, function() {
					return f.progress = 100
				})
		}
		return a
	}(), d = function() {
		function a(a) {
			var b,
				c,
				d,
				f;
			for (null == a && (a = {}), this.elements = [], null == a.selectors && (a.selectors = []), f = a.selectors, c = 0, d = f.length; d > c; c++) b = f[c], this.elements.push(new e(b))
		}
		return a
	}(), e = function() {
		function a(a) {
			this.selector = a, this.progress = 0, this.check()
		}
		return a.prototype.check = function() {
				var a = this;
				return document.querySelector(this.selector) ? this.done() : setTimeout(function() {
					return a.check()
				}, C.elements.checkInterval)
			}, a.prototype.done = function() {
				return this.progress = 100
			}, a
	}(), c = function() {
		function a() {
			var a,
				b,
				c = this;
			this.progress = null != (b = this.states[document.readyState]) ? b : 100, a = document.onreadystatechange, document.onreadystatechange = function() {
				return null != c.states[document.readyState] && (c.progress = c.states[document.readyState]), "function" == typeof a ? a.apply(null, arguments) : void 0
			}
		}
		return a.prototype.states = {
				loading : 0,
				interactive : 50,
				complete : 100
			}, a
	}(), f = function() {
		function a() {
			var a,
				b,
				c,
				d,
				e,
				f = this;
			this.progress = 0, a = 0, e = [], d = 0, c = B(), b = setInterval(function() {
				var g;
				return g = B() - c - 50, c = B(), e.push(g), e.length > C.eventLag.sampleCount && e.shift(), a = p(e), ++d >= C.eventLag.minSamples && a < C.eventLag.lagThreshold ? (f.progress = 100, clearInterval(b)) : f.progress = 100 * (3 / (a + 3))
			}, 50)
		}
		return a
	}(), l = function() {
		function a(a) {
			this.source = a, this.last = this.sinceLastUpdate = 0, this.rate = C.initialRate, this.catchup = 0, this.progress = this.lastProgress = 0, null != this.source && (this.progress = E(this.source, "progress"))
		}
		return a.prototype.tick = function(a, b) {
				var c;
				return null == b && (b = E(this.source, "progress")), b >= 100 && (this.done = !0), b === this.last ? this.sinceLastUpdate += a : (this.sinceLastUpdate && (this.rate = (b - this.last) / this.sinceLastUpdate), this.catchup = (b - this.progress) / C.catchupTime, this.sinceLastUpdate = 0, this.last = b), b > this.progress && (this.progress += this.catchup * a), c = 1 - Math.pow(this.progress / 100, C.easeFactor), this.progress += c * this.rate * a, this.progress = Math.min(this.lastProgress + C.maxProgressPerFrame, this.progress), this.progress = Math.max(0, this.progress), this.progress = Math.min(100, this.progress), this.lastProgress = this.progress, this.progress
			}, a
	}(), K = null, G = null, q = null, L = null, o = null, r = null, Pace.running = !1, y = function() {
		return C.restartOnPushState ? Pace.restart() : void 0
	}, null != window.history.pushState && (S = window.history.pushState, window.history.pushState = function() {
		return y(), S.apply(window.history, arguments)
	}), null != window.history.replaceState && (V = window.history.replaceState, window.history.replaceState = function() {
		return y(), V.apply(window.history, arguments)
	}), k = {
		ajax : a,
		elements : d,
		document : c,
		eventLag : f
	}, (A = function() {
		var a,
			c,
			d,
			e,
			f,
			g,
			h,
			i;
		for (Pace.sources = K = [], g = [ "ajax", "elements", "document", "eventLag" ], c = 0, e = g.length; e > c; c++) a = g[c], C[a] !== !1 && K.push(new k[a](C[a]));
		for (i = null != (h = C.extraSources) ? h : [], d = 0, f = i.length; f > d; d++) J = i[d], K.push(new J(C));
		return Pace.bar = q = new b, G = [], L = new l
	})(), Pace.stop = function() {
		return Pace.trigger("stop"), Pace.running = !1, q.destroy(), r = !0, null != o && ("function" == typeof s && s(o), o = null), A()
	}, Pace.restart = function() {
		return Pace.trigger("restart"), Pace.stop(), Pace.start()
	}, Pace.go = function() {
		var a;
		return Pace.running = !0, q.render(), a = B(), r = !1, o = F(function(b, c) {
				var d,
					e,
					f,
					g,
					h,
					i,
					j,
					k,
					m,
					n,
					o,
					p,
					s,
					t,
					u,
					v;
				for (k = 100 - q.progress, e = o = 0, f = !0, i = p = 0, t = K.length; t > p; i = ++p)
					for (J = K[i], n = null != G[i] ? G[i] : G[i] = [], h = null != (v = J.elements) ? v : [ J ], j = s = 0, u = h.length; u > s; j = ++s) g = h[j], m = null != n[j] ? n[j] : n[j] = new l(g), f &= m.done, m.done || (e++, o += m.tick(b));
				return d = o / e, q.update(L.tick(b, d)), q.done() || f || r ? (q.update(100), Pace.trigger("done"), setTimeout(function() {
						return q.finish(), Pace.running = !1, Pace.trigger("hide")
					}, Math.max(C.ghostTime, Math.max(C.minTime - (B() - a), 0)))) : c()
			})
	}, Pace.start = function(a) {
		u(C, a), Pace.running = !0;try {
			q.render()
		} catch (b) {
			i = b
		} return document.querySelector(".pace") ? (Pace.trigger("start"), Pace.go()) : setTimeout(Pace.start, 50)
	}, "function" == typeof define && define.amd ? define(function() {
		return Pace
	}) : "object" == typeof exports ? module.exports = Pace : C.startOnPageLoad && Pace.start()
}).call(this);